package com.quyunshuo.edwinmusictwo.app

import android.app.Activity
import android.os.Build
import android.os.StrictMode
import android.os.StrictMode.ThreadPolicy
import android.os.StrictMode.VmPolicy
import androidx.annotation.RequiresApi
import com.quyunshuo.edwinmusictwo.base.BaseApplication
import com.quyunshuo.edwinmusictwo.base.BuildConfig
import com.quyunshuo.edwinmusictwo.base.mvvm.v.LanguageManager
import com.quyunshuo.edwinmusictwo.base.mvvm.v.PrefsManager
import com.quyunshuo.module.home.dialog.AppManager
import com.scwang.smart.refresh.footer.ClassicsFooter
import com.scwang.smart.refresh.header.ClassicsHeader
import com.scwang.smart.refresh.layout.SmartRefreshLayout
import dagger.hilt.android.HiltAndroidApp
import me.jessyan.autosize.AutoSize
import me.jessyan.autosize.AutoSizeConfig
import org.greenrobot.eventbus.EventBus


/**
 * App壳
 *
 * @author Qu Yunshuo
 * @since 4/23/21 6:08 PM
 */
@HiltAndroidApp
class AppApplication : BaseApplication() {

    @RequiresApi(Build.VERSION_CODES.M)
    override fun onCreate() {
        // 开启EventBusAPT,优化反射效率 当组件作为App运行时需要将添加的Index注释掉 因为找不到对应的类了
        EventBus
            .builder()
//            .addIndex(MainEventIndex())
            .installDefaultEventBus()
        AppManager.init(this)

        //todo 注册APP前后台切换监听 很有用的功能，可以展示广告。
        appFrontBackRegister()

        //设置全局的Header构建器
        SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, layout ->
            layout.setPrimaryColorsId(android.R.color.white)
//            CustomRefreshHeader(context)
            ClassicsHeader(context)
        }
        //设置全局的Footer构建器
        SmartRefreshLayout.setDefaultRefreshFooterCreator { context, layout ->
            layout.setPrimaryColorsId(android.R.color.white)
            //指定为经典Footer，默认是 BallPulseFooter
            ClassicsFooter(context)
        }
        PrefsManager.initialize(this)

        // 初始化语言管理器并应用用户选择的语言
        LanguageManager.initialize(this)

        super.onCreate()

        // 仅在 debug 版本启用 StrictMode
        if (BuildConfig.DEBUG) {
            enableStrictMode();
        }

    }
    @RequiresApi(Build.VERSION_CODES.M)
    private fun enableStrictMode() {
        // 设置线程策略（检测主线程违规）
        StrictMode.setThreadPolicy(
            ThreadPolicy.Builder()
                .detectDiskReads() // 检测磁盘读取
                .detectDiskWrites() // 检测磁盘写入
                .detectNetwork() // 检测网络访问
                .penaltyLog() // 违规时记录日志
                // 允许布局加载相关的磁盘读取
                .permitResourceMismatches()
//                .penaltyDeath() // 违规时崩溃应用（可选，用于严格测试）
                .build()
        )


        // 设置虚拟机策略（检测内存泄漏等）
        StrictMode.setVmPolicy(
            VmPolicy.Builder()
                .detectLeakedSqlLiteObjects() // 检测 SQLite 对象泄漏
                .detectLeakedClosableObjects() // 检测未关闭的 Closable 对象
                .detectActivityLeaks() // 检测 Activity 泄漏
                .penaltyLog() // 违规时记录日志
                .build()
        )
    }
    /**
     * 注册APP前后台切换监听
     */
    private fun appFrontBackRegister() {
        AppFrontBack.register(this, object : AppFrontBackListener {
            override fun onBack(activity: Activity?) {
            }

            override fun onFront(activity: Activity?) {
            }
        })
    }
}